/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica;

import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import jfreefall.pool;

/**
 *
 * @author jorge
 */
public class objCaida extends JLabel {

    private float y, x, v_x, v_y,x_i,y_i;
    private boolean vivo;
    private Thread act, grab,cae;
    private int escala;
    private double tiempo;
    private ArrayList<objRep> reporte;
    public static final int CONST=400;
    public objCaida(float v_x,float y,double gravedad,double tiempo) {
        this.setIcon(new ImageIcon(getClass().getResource("/img/football-icon.png")));
        vivo = true;
        this.v_x=v_x;
        this.y=y;
        this.tiempo=tiempo;
        x=0;
        v_y=0;
        x_i=0;
        escala=y>v_x?(int)(y/CONST):(int)(v_x/CONST);
        escala++;
        y_i=1000-y/escala;
        reporte=new ArrayList();
        setBounds((int)x_i,(int)y_i,50,50);
    }
    public void inicializar(){
        grab = new Thread(new Runnable()  {

            public void run() {
                while (vivo) {
                    if(!pool.pausa)
                    fuerzaGrabedad();
                    try {
                        Thread.sleep(general.escala);
                    } catch (InterruptedException ex) {
                    }
                }
            }
        });

        cae = new Thread(new Runnable()  {

            public void run() {
                while (vivo) {
                    if(!pool.pausa){
                    caida();
                    desp();
                    }
                    try {
                        Thread.sleep(general.escala);
                    } catch (InterruptedException ex) {
                    }
                }
            }
        });

        act = new Thread(new Runnable() {

            public void run() {
                while(vivo){

                    try {
                        if(!pool.pausa)
                            actualizar();
                        Thread.sleep(100);
                    } catch (InterruptedException ex) {
                    }
                }
            }
        });
        grab.start();
        cae.start();
        act.start();
    }

    private void fuerzaGrabedad() {
        v_y += pool.gravedad;
    }

    private void caida() {
        y -= v_y;
        if(y<=0||pool.tiempo<=0){
            pool.tiempo=0;
            vivo=false;
        }
    }

    private void desp() {
        x += v_x;
    }
    private void actualizar(){
        pool.jpos.setText("("+x+","+y+")");
        reporte.add(new objRep((int)tiempo-(int)pool.tiempo,x,y,v_x,v_y));
        setBounds((int)(x_i+x/escala),(int)(CONST-y/escala),50,50);
    }
    public ArrayList getRep(){
        return reporte;
    }
}
